package com.jar.exercise.多线程.synchroniz;

/**
 * <div  style="border:2px solid none;margin:20px;padding:15px;font-size:24px;text-align:center;color:aqua;">
 *
 *  synchronized 方法上相关的操作
 *
 *  </div>
 *
 * @author RichMan
 * @date 2021-03-13 19:17
 */
public class 普通方法上SynchronizedTest {

    public static void main(String[] args) {

        普通方法上SynchronizedTest 普通方法上SynchronizedTest = new 普通方法上SynchronizedTest();


        // 第一个线程去访问 对象的 第一个方法
        new Thread(() -> {
            普通方法上SynchronizedTest.t1();
        }).start();

        // 第二个线程去访问 对象的 第二个方法
        new Thread(() -> {
            普通方法上SynchronizedTest.t2();
        }).start();


        // 一个对象 如果有多个 同步方法 ， 只要有线程访问其中一个方法，其他的方法也会被锁定。
        // 执行结果 可以看出，两个线程分别的访问两个方法但是只能有一个可以访问另一个必须等待

    }




    private synchronized void t1(){
        System.out.println("---- 开始访问 t1 ----");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("---- 结束访问 t1 ----");
    }


    private synchronized void t2(){
        System.out.println("---- 开始访问 t2 ----");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("---- 结束访问 t2 ----");
    }

}
